// package com.yc.cloud.openai.portal.dao.impl;

// import java.util.ArrayList;
// import java.util.List;

// import org.springframework.beans.BeanUtils;
// import org.springframework.beans.factory.annotation.Value;
// import org.springframework.stereotype.Component;

// import com.yc.cloud.common.basic.utils.PathUtils;
// import com.yc.cloud.openai.portal.dao.TextToImageClient;
// import com.yc.cloud.openai.portal.dto.ImageDto;
// import com.yc.cloud.openai.portal.dto.PromptDto;
// import com.yc.cloud.openai.portal.dto.SDModelDto;
// import com.yc.cloud.openai.portal.dto.request.TextToImageHistoryRequest;
// import com.yc.cloud.openai.portal.dto.request.TextToImageInterruptRequest;
// import com.yc.cloud.openai.portal.dto.request.TextToImageQueueCancelRequest;
// import com.yc.cloud.openai.portal.dto.request.TextToImageQueueRequest;
// import com.yc.cloud.openai.portal.dto.request.TextToImageRequest;
// import com.yc.cloud.openai.portal.dto.response.ComfyUiQueueResponse;
// import com.yc.cloud.openai.portal.dto.response.SDModelResponse;
// import com.yc.cloud.openai.portal.dto.response.SDTextToImageResponse;
// import com.yc.cloud.openai.portal.dto.response.TextToImageHistoryResponse;
// import com.yc.cloud.openai.portal.dto.response.TextToImageResponse;
// import com.yc.cloud.openai.portal.utils.WebClientUtil;

// import cn.hutool.core.codec.Base64;
// import cn.hutool.core.collection.CollUtil;
// import cn.hutool.core.io.FileUtil;
// import cn.hutool.core.util.StrUtil;
// import cn.hutool.json.JSONObject;
// import cn.hutool.json.JSONUtil;
// import lombok.val;
// import lombok.extern.slf4j.Slf4j;

// @Component("STABLE_DIFFUSION")
// @Slf4j
// public class StableDiffusionClientImpl implements TextToImageClient {

//     private final WebClientUtil webClientUtil;
//     @Value("${custom.ai.sd.url}")
//     private String URL;
//     private final PathUtils pathUtils;


//     public StableDiffusionClientImpl(WebClientUtil webClientUtil, PathUtils pathUtils) {
//         this.webClientUtil = webClientUtil;
//         this.pathUtils = pathUtils;
//     }

//     @Override
//     public TextToImageResponse convertTextToImage(TextToImageRequest request) {
//         JSONObject data = new JSONObject();
//         data.putOpt("prompt", request.getPrompt());
//         data.putOpt("negative_prompt", "low quality, blurry, distorted");
//         data.putOpt("steps", 30);
//         data.putOpt("cfg_scale", 7.5);
//         data.putOpt("width", request.getWidth());
//         data.putOpt("height", request.getHeight());
//         data.putOpt("sampler_name", "Euler");
//         data.putOpt("enable_hr", false);
//         data.putOpt("hr_scale", 2);
//         val overrideSettings = new JSONObject();
//         // overrideSettings.putOpt("sd_model_checkpoint", request.getStyle().getValue());
//         data.putOpt("override_settings", overrideSettings);
//         val result = webClientUtil.postJSON(URL + "/txt2img", data.toString(), String.class);
//         log.info("生成图片结果：{}", result);
//         val textToImageSDResponse = JSONUtil.toBean(result, SDTextToImageResponse.class);
//         return convertResult(textToImageSDResponse);
//     }

//     @Override
//     public PromptDto queue(TextToImageQueueRequest request) {
//         return null;
//     }

//     @Override
//     public TextToImageHistoryResponse history(TextToImageHistoryRequest request) {
//         return null;
//     }

//     @Override
//     public ComfyUiQueueResponse cancelQueue(TextToImageQueueCancelRequest request) {
//         return null;
//     }

//     @Override
//     public boolean isRunningQueue(String promptId) {
//         return false;
//     }

//     @Override
//     public boolean interrupt(TextToImageInterruptRequest request) {
//         return false;
//     }

//     private TextToImageResponse convertResult(SDTextToImageResponse textToImageSDResponse) {
//         val images = textToImageSDResponse.getImages();
//         val imageVos = new ArrayList<ImageDto>();
//         val response = new TextToImageResponse();
//         if (CollUtil.isEmpty(images)) {
//             log.error("images is empty");
//             return response;
//         }
//         images.forEach(imageBase64 -> {
//             val imageDto = new ImageDto();
//             imageDto.setData(imageBase64);
//             //save image to local
//             val path = saveImage(imageBase64);
//             imageDto.setUrl(pathUtils.convertNetUrl(path));
//             val info = textToImageSDResponse.getInfo();
//             if (StrUtil.isNotEmpty(info)) {
//                 val stableDiffusionInfoDto = JSONUtil.toBean(info, SDTextToImageResponse.StableDiffusionInfoDto.class);
//                 imageDto.setWidth(stableDiffusionInfoDto.getWidth());
//                 imageDto.setHeight(stableDiffusionInfoDto.getHeight());
//             }
//             imageVos.add(imageDto);
//         });
//         log.info("生成图片数量：{}", images.size());
// //        response.setImages(imageVos);
//         return response;
//     }

//     /**
//      * 获取SD模型列表
//      *
//      * @return SD模型列表信息
//      */
//     public List<SDModelDto> getModelList() {
//         val result = webClientUtil.get(URL + "/sd-models", String.class);
//         val modelList = JSONUtil.toList(result, SDModelResponse.class);
//         return modelList.stream().map(model -> {
//             val sdModelDto = new SDModelDto();
//             BeanUtils.copyProperties(model, sdModelDto);
//             return sdModelDto;
//         }).toList();
//     }

//     private String saveImage(String imageBase64) {
//         val imagePath = pathUtils.getTempBasePath();
//         val fileName = System.currentTimeMillis() + ".png";
//         val file = FileUtil.file(imagePath, fileName);
//         byte[] imageBytes = Base64.decode(imageBase64);
//         FileUtil.writeBytes(imageBytes, file);
//         return file.getAbsolutePath();
//     }

//     /**
//      * 获取模型的checkpoint
//      *
//      * @param style 图片风格
//      * @return 模型的checkpoint
//      */
//     private String getModelCheckPointByStyle(String style) {
// //        if (ImageStyle.NATURAL_HARMONY.getKey().equals(style)) {
// //            return "极致写实风景摄影MAX_V1.0";
// //        }
// //        else if (ImageStyleType.REALISTIC_PORTRAIT.getKey().equals(style)) {
// //
// //        }
//         return "majicMIX realistic 麦橘写实_v7";
//     }
// }
